#ifndef SERVER_H
#define SERVER_H
#include <netinet/in.h>
#include <sys/types.h>
/*** Symbols defined in common.c.
************************************/
/* The name of this program. */
extern const char* program_name;
/* If nonzero, print verbose messages.*/
extern int verbose;

/* Like malloc, except aborts the program if allocation fails.*/
extern void* xmalloc (size_t size);
/* Like realloc, except aborts the program if allocation fails.*/
extern void* xrealloc (void* ptr, size_t size);
/* Like strdup, except aborts the program if allocation fails.*/
extern char* xstrdup (const char* s);
/* Print an error message for a failed call OPERATION, using the value
of errno, and end the program. */
extern void system_error (const char* operation);
/* Print an error message for failure involving CAUSE, including a
descriptive MESSAGE, and end the program. */
extern void error (const char* cause, const char* message);
/* Return the directory containing the running program's executable.
The return value is a memory buffer that the caller must deallocate
using free. This function calls abort on failure. */
extern char* get_self_executable_directory ();
/*** Symbols defined in module.c
**************************************/
/* An instance of a loaded server module. */
struct server_module {
/* The shared library handle corresponding to the loaded module.*/
void* handle;
/* A name describing the module. */
const char* name;
/* The function that generates the HTML results for this module.*/
void (* generate_function) (int);
};



/* The directory from which modules are loaded.*/
extern char* module_dir;
//Implementation 223

/* Attempt to load a server module with the name MODULE_PATH. If a
server module exists with this path, loads the module and returns a
server_module structure representing it. Otherwise, returns NULL. */
extern struct server_module* module_open (const char* module_path);
/* Close a server module and deallocate the MODULE object.*/
extern void module_close (struct server_module* module);
/*** Symbols defined in server.c.
*/

/* Run the server on LOCAL_ADDRESS and PORT. */
extern void server_run (struct in_addr local_address, uint16_t port);
#endif
/* SERVER_H */

